package com.zb.mapper;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.zb.entity.SelectVo;
import com.zb.entity.ZjStoreGoodsStock;
import com.zb.extend.StoreGoodsStockExtend;
import com.zb.vo.GoodsStockSelectVo;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;

import java.util.List;

/**
 * <p>
 * 仓库商品库存表 Mapper 接口
 * </p>
 *
 * @author WEN
 * @since 2023-10-30
 */
@Repository
public interface ZjStoreGoodsStockMapper extends BaseMapper<ZjStoreGoodsStock> {

    /**
     * 根据[仓库ID]&[仓库商品ID]查询仓库商品库存
     * @param storeIds 仓库ID
     * @param storeGoodIds 仓库商品ID
     * @return
     */
    List<ZjStoreGoodsStock> getByStroreIdsAndStorePositionIdsAndStoreGoodsIds(@Param("storeIds") List<Long> storeIds, @Param("storeGoodIds") List<Long> storeGoodIds);

    /**
     * 根据仓位ID集合分组统计获取即时库存数
     * @param storePositionIds 仓位ID
     * @return
     */
    List<ZjStoreGoodsStock> getSystemStockGroupByStorePositionIds(@Param("storePositionIds") List<Long> storePositionIds);

    /**
     * 根据仓库ID & 仓库商品ID查询商品库存
     * @param storeIds 仓库ID
     * @param storeGoodsIds 仓库商品ID
     * @return
     */
    List<ZjStoreGoodsStock> getStoreIdsAndStoreGoodsIds(@Param("storeIds") List<Long> storeIds, @Param("storeGoodsIds") List<Long> storeGoodsIds);

    /**
     * 根据仓库ID获取仓库商品库存
     * @param storeIds 仓库ID
     * @return
     */
    List<ZjStoreGoodsStock> getByStoreIds(@Param("storeIds") List<Long> storeIds);

    /**
     * 根据[仓库ID]&[商品ID]&[商品规格ID]查询仓库商品库存
     * @param storeIds 仓库ID
     * @param goodsIds 商品ID
     * @param goodsSpecIds 商品规格ID
     * @return
     */
    List<ZjStoreGoodsStock> getByStoreIdsAndGoodsIdsAndGoodsSpecIds(@Param("storeIds") List<Long> storeIds, @Param("goodsIds") List<Long> goodsIds, @Param("goodsSpecIds") List<Long> goodsSpecIds);

    /**
     * 获取商品库存
     * @param selectVo
     * @return
     */
    ZjStoreGoodsStock getGoodsStock(@Param("selectVo") GoodsStockSelectVo selectVo);

    /**
     * 获取服务商仓库商品明细列表
     * @param storeId 仓库ID
     * @param selectVo 搜索对象
     * @return
     */
    List<StoreGoodsStockExtend> getNetworkMobileStoreGoods(@Param("storeId") Long storeId, @Param("selectVo") SelectVo selectVo);

    /**
     * 获取服务商仓库商品明细列表总记录数
     * @param storeId 仓库ID
     * @param selectVo 搜索对象
     * @return
     */
    long getNetworkMobileStoreGoodsCount(@Param("storeId") Long storeId, @Param("selectVo") SelectVo selectVo);
}
